盛世集团

提交需求
*
*

*
*
*
立即提交
点击”立即提交” ,表明我理解并同意 《盛世集团科技隐私条款》

logo

    产品与服务
    解决方案
    技术支持
    合作发展
    关于盛世集团

    申请试用
      泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析
      发布时间:2023-05-19 阅读次数: 1517 次

      起因

      长亭最近发了一个漏洞预警《在野1day风险提示|泛微Ecology信息泄露&前台任意用户登录漏洞》 ,预警文章链接为https://mp.weixin.qq.com/s/ZvbXbtcpq8EslNKZ2hHW_w ,本着学习研究的态度 ,对漏洞可能涉及的逻辑进行了粗略研究。



      分析
      长亭在预警文章中放出了最新版本的xray ,更新后的xray可以对该漏洞进行远程检测 ,检测命令如下

      ./xray ws --poc poc-yaml-ecology-ofslogin-aul --url http://example.com

      在本地运行上述命令

      图片

      通过wireshark即可抓取到xray验证该漏洞所发出的请求数据

      为

      /mobile/plugin/1/ofsLogin.jsp?syscode=syscode&timestamp=2&gopage=3&receiver=test&loginTokenFromThird=

      图片

      既然定位到了具体文件 ,那么接下来就可以进行分析了

      打开泛微ecology9 安装目录下的mobile/plugin/1/ofsLogin.jsp文件 ,如下

      图片

      首先在19-23行 ,在访问该mobile/plugin/1/ofsLogin.jsp这个url时 ,会首先接收传输过来的syscode、receiver、timestamp、loginTokenFromThird、gopage这几个参数

      图片

      然后在26行 ,调用AESCoder.encrypt方法对参数进行AES加密 ,AESCoder.encrypt方法的第一个参数为receiver+timestamp ,调用一个Prop.getPropValue方法获得一个返回值并与接收到的syscode值进行拼接 ,得到的返回值作为第二个参数 ,AES加密得到的数据赋值给loginTokenFromThird2变量

      图片

      接下来从36行开始进行登录逻辑的验证 ,在36-39行 ,判断接收到的loginTokenFromThird与生成的loginTokenFromThird2值是否相等 ,如果不相等 ,则登录失败 ,并调转到/login/Login.jsp。只有loginTokenFromThird与loginTokenFromThird2相等才能继续执行下面的登录逻辑。

      图片

      继续往下 ,当loginTokenFromThird与loginTokenFromThird2相等时 ,首先会将接收到的syscode值作为条件参数在数据表ofs_sendinfo中进行查询 ,查询的字段为hrmtransrule。当查询到的hrmtransrule为空时(也就是查询条件syscode值在ofs_sendinfo表中不存在) ,将hrmtransrule赋值为“1”;当查询到的hrmtransrule不为空时 ,进行52-63行的判断。定义了一个变量rule ,默认值为"loginid" ,若hrmtransrule为"0" ,则将rule赋值为"id";若hrmtransrule为"1" ,则rule赋值为"loginid" ,后面的逻辑同理。

      图片

      将上述判断逻辑执行过后 ,rule变量的值作为条件字段在数据表HrmResource中查询 ,而条件参数则为接收到的receiver值

      图片

      此时笔者直接在本地测试环境数据库中执行select * from HrmResource;SQL语句查了一下 ,发现笔者的环境中HrmResource是个空表

      图片

      也就是说在笔者的环境中 ,后面的逻辑是无法继续执行的

      接下来到人事->新建人员中新建一个人员

      图片

      新建完成后 ,再次查询 ,可以看到HrmResource表中已经有数据

      图片

      故笔者猜测 ,只有HrmResource用户表中存在数据时 ,该漏洞才有可能被利用。

      继续后面的逻辑 ,后面的逻辑就比较简单了 ,从查询到的结果中获取id并赋值给userid ,然后根据userid生成认证凭证 ,也就是session ,完成认证后就跳转到用户指定的页面 ,也就是接收到的gopage参数

      图片

      分析到这里 ,整个登录逻辑已经非常清晰了 ,关键在两个条件:

      1.loginTokenFromThird需要与loginTokenFromThird2相等 ,loginTokenFromThird可控 ,loginTokenFromThird2则是根据可控的参数调用内部加密函数生成 ,且加密函数的入参不变时 ,loginTokenFromThird2也是固定的;

      2.HrmResource用户信息表中必须要有数据。



      测试

      在HrmResource表中loginid其实就是登录用户名 ,比如默认系统管理员的loginid就是sysadmin ,想要接近loginid的判断逻辑有两个方法 ,第一种是syscode值在表中不存在 ,第二种是根据syscode查到的hrmtransrule必须"1" ,显然第一种更好利用一些。接下来就可以构造参数生成loginTokenFromThird2 ,然后将得到的loginTokenFromThird2值原封不动作为loginTokenFromThird参数值即可完成任意用户登录的利用。

      图片


      盛世集团·(中国大陆)官方网站 免费试用
      盛世集团·(中国大陆)官方网站 服务热线
      盛世集团·(中国大陆)官方网站

      马上咨询

      400-811-3777

      盛世集团·(中国大陆)官方网站 回到顶部
      【网站地图】